home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
101-125
/
scopedisk102
/
hamsharp
/
hamsharp4.c
< prev
Wrap
C/C++ Source or Header
|
1995-03-19
|
1KB
|
58 lines
/*
** Part 4
*/
#include <stdio.h>
int **diff = NULL;
int intensity [16][16][16];
/* Prepare to call rgberr */
initrgberr ()
{
char *calloc ();
int i, j;
int r, g, b;
/* Setup squares of differences lookup table */
diff = (int **) calloc (16, sizeof (int *));
if (diff == NULL)
fatalerr ("Out of memory");
for (i = 0; i < 16; i++) {
diff [i] = (int *) calloc (16, sizeof (int));
if (diff [i] == NULL)
fatalerr ("Out of memory");
for (j = 0; j < 16; j++)
diff [i][j] = (i - j) * (i - j);
}
/* Setup intensity table */
for (r = 0; r < 16; r++)
for (g = 0; g < 16; g++)
for (b = 0; b < 16; b++)
intensity [r][g][b] = (3 * r + 6 * g + b) * 15 / 150;
}
/* Finish calling rgberr */
freergberr ()
{
int i;
if (diff != NULL) {
for (i = 0; i < 16; i++)
free (diff [i]);
free (diff);
diff = NULL;
}
}
/* Evaluates 'distance' between 2 colours */
rgberr (r1, g1, b1, r2, g2, b2)
{
return (diff [intensity [r1][g1][b1]][intensity [r2][g2][b2]] +
diff [r1][r2] +
diff [g1][g2] +
diff [b1][b2]);
}